#include <iostream>
#include <unistd.h>

bool GetRecvMessage(std::string &recv_mes)
{
    bool result = false;
    std::string method = getenv("METHOD");
    if(method == "GET"){
        recv_mes = getenv("QUERY_STRING");
        result = true;
    }
    else if(method == "POST"){
        // 获取正文的多少个字节
        int content_length = atoi(getenv("Content_Length"));
        char ch = 0;
        while (content_length)
        {
            read(0, &ch, 1);    // 读 0号文件描述符（已重定向后）中的信息
            recv_mes.push_back(ch);
            content_length--;
        }
        // std::cerr << "-------------" << std::endl;
        result = true;
    }
    else{
        // do nothing
    }
    return result;
}

void CutString(std::string &target, std::string sep, std::string &outl, std::string &outr)
{
    size_t pos = target.find(sep);
    if(pos != std::string::npos)
    {
        outl = target.substr(0, pos);
        outr = target.substr(pos+sep.size());
    }
}

int main()
{
    // std::cerr << "I am a replease process" << std::endl;
    // std::cerr << "content_lenght: " << getenv("Content_Length") << std::endl;

    // 1.接收http服务器交给我们的信息
    std::string recv_mes;
    GetRecvMessage(recv_mes);

    // 2.对这些信息做出处理, eg:recv_mes: a=100&b=200
    std::string str1;
    std::string str2;
    // 2.1-分割字符串（&）
    CutString(recv_mes, "&", str1, str2);

    // 2-2-再次切分（=）
    std::string name1;
    std::string value1;
    CutString(str1, "=", name1, value1);
    std::string name2;
    std::string value2;
    CutString(str2, "=", name2, value2);

    // 3.debug,将信息发送到与 http 交互的匿名管道上（1号文件描述符）
    std::cout << name1 << " : " << value1 << std::endl;
    std::cout << name2 << " : " << value2 << std::endl;

    // 4.debug,将信息发送到终端上（2号文件描述符）
    std::cerr << name1 << " : " << value1 << std::endl;
    std::cerr << name2 << " : " << value2 << std::endl;
    return 0;
}